package org.ajax.test;

import com.google.gson.Gson;
import org.ajax.entity.User;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author ZQX
 * @date 2024-11-19
 */
public class GsonTest01 {

    /**
     * 序列化：把 Java 对象转换为 JSON 字符串
     */
    private static void testToJson() {
        // 第一：实例化实体对象，封装相关的数据
        User user = new User("张三",20) ;
        // 第二：实例化 Gson 对象
        Gson gson = new Gson();
        // 第三：把实体对象转换为 JSON 字符串
        String json = gson.toJson(user);
        System.out.println(json);
    }

    /**
     * 反序列化：把 JSON 字符串转换为 Java 对象
     * 注意：必须提前准备好一个 Java 对象
     * 而且 Java 对象的属性必须与 JSON 字符串的属性一一对应
     */
    private static void testFromJson() {
        // 第一：定义 JSON 字符串
        String json = "{\"username\":\"ls\",\"age\":28}" ;
        // 第二：实例化 Gson 对象
        Gson gson = new Gson();
        // 第三：把 JSON 字符串转换为 Java 对象
        // 语法如下：
        // 类名 对象 = Gson对象.fromJson("JSON字符串",类名.class)
        User user = gson.fromJson(json, User.class);
        System.out.println(user.getUsername());
        System.out.println(user.getAge());
    }


    /**
     * 把 List 集合转换为 JSON 字符串 - 数组
     */
    private static void testToJsonList() {
        // 第一：实例化实体对象，封装相关的数据
        List<User> list = new ArrayList<>();

        User u1 = new User("张三",20) ;
        User u2 = new User("李四",21) ;
        User u3 = new User("王五",22) ;

        list.add(u1);
        list.add(u2);
        list.add(u3);

        // 第二：实例化 Gson 对象
        Gson gson = new Gson();
        // 第三：把实体对象转换为 JSON 字符串
        String json = gson.toJson(list);

        System.out.println(json);
    }


    /**
     * 把 Map 集合转换为 JSON 字符串 - 对象 - data.u1.username
     */
    private static void testToJsonMap() {
        // 第一：实例化实体对象，封装相关的数据
        Map<String,User> map = new HashMap<>();

        User u1 = new User("张三",20) ;
        User u2 = new User("李四",21) ;
        User u3 = new User("王五",22) ;

        map.put("u1",u1) ;
        map.put("u2",u2) ;
        map.put("u3",u3) ;

        // 第二：实例化 Gson 对象
        Gson gson = new Gson();
        // 第三：把实体对象转换为 JSON 字符串
        String json = gson.toJson(map);

        System.out.println(json);
    }


    public static void main(String[] args) {
        testToJsonMap() ;
    }
}
